home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / dir_test / dir_test.asm next >
Assembly Source File  |  1991-10-18  |  5KB  |  284 lines

  1. .xlist
  2. STDIN        equ    0    ;
  3. STDOUT        equ    1    ;
  4. STDERR        equ    2    ;
  5.  
  6. CR        equ    0dh
  7. LF        equ    0ah
  8. TAB        equ    09h
  9. ESCP        equ    1bh
  10. EOT        equ    '$'
  11. EOF        equ    1ah
  12.  
  13. PSP_SEL        equ    04h
  14. TBIOS_SEL    equ    0110h
  15. VRAM1_SEL    equ    120h
  16. VRAM2_SEL    equ    128h
  17.  
  18. FALSE        equ    0
  19. TRUE        equ    (not FALSE)
  20. .list
  21. ;
  22. doscall    macro    func
  23. ifnb    <func>
  24. if    func ge 100h
  25.     mov    ax,func
  26. else
  27.     mov    ah,func
  28. endif
  29. endif
  30.     int    21h
  31.     endm
  32. ;
  33. G_work_size    equ    15300h
  34. EGB    equ    fword ptr fs:[20h]
  35. ;
  36. graphic_work    dd    ?
  37. ;
  38. M_work_size    equ    4096d
  39. MUS    equ    fword ptr fs:[40h]
  40. MSN    equ    fword ptr fs:[48h]
  41. ;
  42. mause_work    dd    ?
  43. ;
  44. file_msg    dw    28
  45. locate_y    dw    80
  46.         dw    14
  47. file_put    db    12 dup (0)
  48.         db    1  dup (0)
  49. file_type1    db    1  dup (0)
  50.         db    0
  51. ;
  52. file_msdos    db    21 dup (0)
  53. file_inf    db    0
  54. file_time    dw    0
  55. file_date    dw    0
  56. file_size    db    4  dup (0)
  57. file_name    db    12 dup (0)
  58.         db    0
  59. ;
  60. file_space    db    12 dup (0)
  61.         db    0
  62. ;
  63. pass_msg    dw    24
  64.         dw    24
  65. file_pass_s    dw    09
  66. file_pass    db    24 dup (0)
  67.         db    0
  68. ;
  69. NextPrmOffset    dd    ?
  70. ;
  71. wait_msg    dw    0
  72.         dw    16
  73.         dw    2
  74.         db    '<>'
  75.         db    0
  76. ;
  77. err_msg0    dw    0
  78.         dw    32
  79.         dw    15
  80.               db    'ドライブ番号が無効です。'
  81. ;
  82. err_msg1    dw    0
  83.         dw    48
  84.         dw    15
  85.               db    'パスが無効です。'
  86. ;
  87. err_msg2    dw    0
  88.         dw    64
  89.         dw    11
  90.               db    '一致しない。'
  91. ;
  92. mause_y        dw    80
  93. mause_x        dw    80
  94. ;
  95. ;=======< FILE display テスト プログラム >========
  96. start:
  97.     mov    ax,0004h        ; コマンドライン領域のセレクタの設定
  98.     mov    fs,ax            ;
  99.     mov    esi,81h            ;  esi=コマンド領域のポインタ
  100.     mov    edi,offset file_pass    ;  edx=表示領域のポインタ
  101.     movzx    ecx,byte ptr fs:[esi-1]    ;  ecx=コマンド文字数
  102.     mov    byte ptr fs:[esi+ecx],0    ;  コマンド領域の最後に区切り文字セット
  103.     mov    ds:[file_pass_s],cx    ;  文字数セット
  104. cmdprm:
  105.     lods    byte ptr fs:[esi]    ;  al=コマンド領域から一文字取り出す
  106.     cmp    al,' '            ;  空白なら読み飛ばす
  107.     je    cmdprm            ;
  108.     cmp    al,TAB            ;  TABなら読み飛ばす
  109.     je    cmdprm            ;
  110.     stosb                ;  表示領域=al
  111.     cmp    al,0            ;  終了ならMAINへ
  112.     je    main            ;
  113.     jmp    short cmdprm        ;
  114. ;
  115. main:
  116.     mov    ax,0110h        ; BIOS領域のセレクタの設定
  117.     mov    fs,ax            ;
  118. ;
  119.     sub    esp,G_work_size        ; スタックにEGB用作業領域の確保
  120.     mov    graphic_work,esp    ;
  121.     mov    edi,esp            ; EGBの初期化 
  122.     mov    ecx,G_work_size        ;
  123.     mov    ah,00h            ;
  124.     call    EGB            ;
  125. ;
  126.     mov    ah,01h            ; 640*480 256色 モードにする
  127.     mov    al,00h            ;
  128.     mov    edx,12d            ;
  129.     call    EGB            ;
  130. ;
  131.     mov    ah,05h            ; 書き込みページを0にする
  132.     mov    al,00h            ;
  133.     call    EGB            ;
  134. ;
  135.     mov    ah,06h            ; 表示ページを0にする
  136.     mov    al,00h            ;
  137.     mov    edx,00000001h        ;
  138.     call    EGB            ;
  139. ;
  140.     mov    ah,08h            ; 前景色設定
  141.     mov    al,00h            ;
  142.     mov    edx,00ffffffh        ;
  143.     call    EGB            ;
  144. ;
  145.     mov    ah,08h            ; 背景色設定
  146.     mov    al,01h            ;
  147.     mov    edx,00000fffh        ;
  148.     call    EGB            ;
  149. ;
  150.     mov    ah,17h            ; 文字間隔設
  151.     mov    dx,0001h        ;
  152.     call    EGB            ;
  153. ;
  154.     mov    ah,19h            ; 文字の字体設定
  155.     mov    dx,0001h        ;
  156.     call    EGB            ;
  157. ;
  158.     mov    ax,0a09h        ; 描画モードの設定
  159.     call    EGB            ;
  160. ;
  161.     mov    ah,20h            ; 画面クリア
  162.     call    EGB            ;
  163. ;
  164.     mov    esi,offset pass_msg    ; パラメタの表示
  165.     mov    edi,graphic_work    ;
  166.     mov    ah,60h            ;
  167.     call    EGB            ;
  168. ;
  169. ;=======< 先頭のファイル検索 >========
  170.     mov    edx,offset file_msdos
  171.     doscall    1ah
  172. ;
  173.     mov    edx,offset file_pass    ; 最初に一致するファイル名の検索
  174.     mov    ecx,0000ffffh        ;
  175.     doscall    4eh            ;
  176. ;
  177.     cmp    ax,02d
  178.     je    short err1
  179.     cmp    ax,18d
  180.     je    short err2
  181. ;
  182.     mov    esi,offset file_msg
  183.     jmp    short msgput1
  184. err1:
  185.     mov    esi,offset err_msg1
  186.     jmp    short msgput1
  187. err2:
  188.     mov    esi,offset err_msg2
  189. msgput1:
  190.     mov    edi,graphic_work
  191.     mov    ah,60h
  192.     call    EGB
  193. ;
  194. ;=======< ファイルが無くなる迄ファイル検索 >========
  195. dirstart:
  196.     mov    edx,offset file_pass    ; 次に一致するファイル名の検索
  197.     doscall    4fh            ;
  198. ;
  199.     cmp    ax,18d            ; 終了判定
  200.     je    dirend            ;
  201. ;
  202.     mov    esi,offset file_name    ; ファイル名表示領域に複写
  203.     mov    edi,offset file_put    ;  esi=ファイル名格納場所
  204.     mov    ecx,12d            ;  edi=ファイル名表示領域
  205.     cld                ;  ecx=文字数
  206.     inc    ecx            ;
  207.     rep    movsb            ;
  208. ;
  209.     mov    esi,offset file_space    ; ファイル名格納領域を初期化
  210.     mov    edi,offset file_name    ;  esi=ファイル名初期値
  211.     mov    ecx,12d            ;  edi=ファイル名格納
  212.     cld                ;  ecx=文字数
  213.     inc    ecx            ;
  214.     rep    movsb            ;
  215. ;
  216.     mov    ds:[file_type1],' '    ;
  217. ;
  218.     mov    ah,file_inf        ; ファイル属性設定
  219.     and    ah,10h            ;
  220.     cmp    ah,10h            ;  
  221.     jne    short setnt1        ;
  222.     mov    ds:[file_type1],'d'    ;
  223. setnt1:
  224. ;
  225. dirput:
  226.     mov    esi,offset file_msg    ; ファイル名表示
  227.     mov    edi,graphic_work    ;
  228.     mov    ah,60h            ;
  229.     call    EGB            ;
  230.     mov    ax,16d            ;
  231.     add    ds:[locate_y],ax    ;
  232.     mov    ax,400d            ;
  233.     cmp    ds:[locate_y],ax    ;
  234.     je    short ly        ;
  235.     jmp    dirstart        ;
  236. ly:    mov    ax,80d            ;
  237.     mov    ds:[locate_y],ax    ;
  238.     mov    ax,100d            ;
  239.     add    ds:[file_msg],136d    ;
  240.     jmp    dirstart
  241. ;
  242. dirend:
  243.     sub    esp,M_work_size        ; スタックに作業領域を獲得する。
  244.     mov    mause_work,esp        ;
  245.     mov    edi,esp            ;
  246.     mov    ecx,M_work_size        ;
  247.     mov    ah,00h            ; マウスの初期化を行う
  248.     call    MUS            ;
  249. ;  
  250.     mov    ah,0dh            ; マウスの表示画面の設定
  251.     mov    al,0d            ;   表示ページ0
  252.     mov    edx,12d            ;   画面モード12
  253.     call    MUS            ;
  254. ;  
  255.     mov    ah,02h            ; マウスの表示
  256.     mov    al,1d            ;
  257.     call    MUS            ;
  258. ;
  259. msta:
  260.     call    MSN            ; マウスの状態監視
  261. ;  
  262.     mov    ah,03h            ; マウスの状態取り込み  
  263.     call    MUS            ;
  264. ;
  265.     mov    esi,offset wait_msg
  266.     mov    edi,graphic_work
  267.     mov    ah,60h
  268.     call    EGB
  269. ;
  270.     cmp    ch,00h            ; マウスボタンが押されたか  
  271.     je    short msta        ;
  272. ;
  273.     mov    ah,01h            ; マウス動作終了
  274.     call    MUS            ;
  275. ;
  276. ;
  277. ;=======< MS-DOSに戻る >========
  278.     doscall    4c00h
  279.         ret
  280. ;
  281. .stack    20000h * 4
  282. ;
  283.     end    start
  284.